// src/hooks/useOpenTab.ts
import { useNavigate } from "umi";
import { useCallback } from "react";

/**
 * 打开新选项卡页面的Hook
 * @returns 打开选项卡的函数
 */
export const useOpenTab = () => {
  const navigate = useNavigate();

  /**
   * 打开新选项卡页面
   * @param path 路由路径
   * @param label 选项卡标题
   * @param state 传递的状态参数
   * @param options 导航选项
   */
  return useCallback((
    path: string,
    label: string,
    state?: Record<string, any>,
    options?: {
      replace?: boolean;
      keepState?: boolean;
    }
  ) => {
    // 1. 构造唯一key（基于路径和当前时间戳）
    const tabKey = `${path.replace(/\//g, '_')}_${Date.now()}`;
    
    // 2. 发送自定义事件（通知布局组件添加选项卡）
    window.dispatchEvent(
      new CustomEvent('open-new-tab', {
        detail: {
          key: tabKey,
          label,
          path,
          state
        }
      })
    );
    
    // 3. 执行导航
    navigate(path, {
      state: {
        ...(state || {}),
        _tabKey: tabKey, // 传递选项卡key
        _tabTitle: label // 传递选项卡标题
      },
      replace: options?.replace
    });
  }, [navigate]);
};